const jwt = require('jsonwebtoken')
const { JWT_SECRET } = require('../config/config.default')
const {
  TokenExpiredError,
  JsonWebTokenError,
} = require('../consitant/err.type')
const auth = async (ctx, next) => {
  const { token } = ctx.request.header
  try {
    ctx.state.user = jwt.verify(token, JWT_SECRET)
  } catch (err) {
    switch (err.name) {
      case 'TokenExpiredError':
        console.error('token已经过期', err)
        return ctx.app.emit('error', TokenExpiredError, ctx)
      case 'JsonWebTokenError':
        console.error('无效的token', err)
        return ctx.app.emit('error', JsonWebTokenError, ctx)
    }
  }
  await next()
}

module.exports = {
  auth,
}
